<?php

namespace Cekurte\Shortener\Url;

use Cekurte\Shortener\Url\Adapter;

/**
 * Google Encurtador de URL's
 *
 * Classe básica para utilização da Google URL Shortener API
 *
 * @author     João Paulo Cercal
 * @version    1.0
 */
class Google implements Adapter
{
	/**
     * Chave para utilização da API
     *
     * @var string
     */
	const API_KEY 	= 'AIzaSyAyw2WxW1vMAkWlErrux9o0co8zRt5VY3A';
	
	/**
     * URL de acesso a API
     *
     * @var string
     */
    const API_URL 	= 'https://www.googleapis.com/urlshortener/v1/url';
    
    /**
     * Encurta uma URL longa
     * 
     * @param string $longUrl
     * 
     * @return string uma url encurtada, por exemplo: http://goo.gl/p9vgX
     */
    public function encurtar( $longUrl )
    {
    	// Gera a URL utilizando a URL da API + a CHAVE do Usuário
    	$apiUrl = sprintf('%s?key=%s', self::API_URL, self::API_KEY );
    	
    	$ch 	= curl_init( $apiUrl ); 
    	
        curl_setopt($ch, CURLOPT_POST, true); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json') ); 
        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( array('longUrl' => $longUrl) ));
        
        $result 	= curl_exec($ch);   
        
        curl_close($ch);
        
        $result 	= json_decode($result, true);
        
        return $result['id']; 
    }
    
    /**
     * Desencurta uma url encurtada
     * 
     * @param string $shortUrl
     * @param bool $analytics Se true mostra o mapa da URL, do contrário não mostra. O padrão é false (não mostrar)
     * 
     * @return string a url original
     */
    public function desencurtar( $shortUrl, $analytics = false )
    {
    	$apiUrl = sprintf('%s?shortUrl=%s&key=%s', self::API_URL, $shortUrl, self::API_KEY );

        if( $analytics )
        {
        	$apiUrl = sprintf( $apiUrl . '&projection=%s', 'FULL' );
        }
        
        $ch = curl_init( $apiUrl ); 
        
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );    
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        
        $result	 = curl_exec($ch);   
        
        curl_close($ch); 
        
        $result = json_decode($result, true);
        
        return $result['longUrl'];
    }
} 